﻿ #define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

//函数指针数组的⽤途：转移表

int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
int mul(int a, int b)
{
	return a * b;
}
int div(int a, int b)
{
	return a / b;
}

void menu()
{
	printf("***************************\n");
	printf("****  1. add  2. sub   ****\n");
	printf("****  3. mul  4. div   ****\n");
	printf("****  0. exit          ****\n");
	printf("***************************\n");
}

//int main()
//{
//	int input = 0;
//	int x = 0;
//	int y = 0;
//	int z = 0;
//	do
//	{
//		//int input = 0;//**************此时input的作用域不能覆盖整个do while循环
//		//int x = 0;
//		//int y = 0;
//		//int z = 0;
//		menu();
//		printf("请选择：");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			printf("输入操作数：");
//			scanf("%d %d", &x, &y);
//			z = add(x, y);
//			printf("%d\n", z);
//			break;
//		case 2:
//			printf("输入操作数：");
//			scanf("%d %d", &x, &y);
//			z = sub(x, y);
//			printf("%d\n", z);
//			break;
//		case 3:
//			printf("输入操作数：");
//			scanf("%d %d", &x, &y);
//			z = mul(x, y);
//			printf("%d\n", z);
//			break;
//		case 4:
//			printf("输入操作数：");
//			scanf("%d %d", &x, &y);
//			z = div(x, y);
//			printf("%d\n", z);
//			break;
//		case 0:
//			printf("推出计算器\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//		}
//	} while (input);
//
//	return 0;
//}

//int main()
//{
//	int input = 0;
//	int x = 0;
//	int y = 0;
//	int z = 0;
//	//函数指针数组 ---转移表
//	//*pfarr={add,sub,mul,div}//指针
//	//int (*pfarr)(int,int) = {add,sub,mul,div}//函数指针
//	int (*pfarr[5])(int, int) = { 0,add,sub,mul,div };//函数指针数组
//	//                            0  1   2   3   4
//	do
//	{
//		menu();
//		printf("请选择：");
//		scanf("%d", &input);
//
//		if (input >= 1 && input <= 4)
//		{
//		printf("输入操作数：");
//		scanf("%d %d", &x, &y);
//		z = pfarr[input](x, y);
//		printf("%d\n", z);
//		}
//		else if (input == 0)
//		{
//		printf("推出计算器\n");
//		}
//		else
//		{
//		printf("选择错误\n");
//		}
//	} while (input);
//
//	return 0;
//}

//把重复的代码写成函数 但是这个函数又可以完成不同的任务

//回调函数
//void cal(int(*pf)(int, int))
//{
//	int x = 0;
//	int y = 0;
//	printf("输入操作数：");
//	scanf("%d %d", &x, &y);
//	printf("%d\n", pf(x, y));
//}
//
//int main()
//{
//	int input = 0;
//	do
//	{
//		menu();
//		printf("请选择：");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			cal(add);
//			break;
//		case 2:
//			cal(sub);
//			break;
//		case 3:
//			cal(mul);
//			break;
//		case 4:
//			cal(div);
//			break;
//		case 0:
//			printf("推出计算器\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//		}
//	} while (input);
//
//	return 0;
//}